package com.wh.wisdomsite.xbox.utils.json;

import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.wh.wisdomsite.xbox.utils.date.DateTool;
import net.sf.json.JSONArray;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


/**
 * JSON工具类(net.sf.json的JSON解析类)
 * @Package com.wh.wisdomsite.xbox.utils.json
 * @author 谢泽鹏
 * @date 2014年10月8日 下午4:02:14
 * @Copyright 个人版权所有
 * @Company 贵州万华科技有限公司Copyright (c) 2014
 * @version V1.0
 */
public class JsonUtil_Sf {


    private static final Log logger = LogFactory.getLog(JsonUtil_Sf.class);

	/**
	 * 通过JSONObjcet的Key获来获取Value(net.sf.json)
	 * @param jsonObject 对象
	 * @param key        key值
	 * @return String    返回值
	 */
	public static String getValueByKey(JSONObject jsonObject, String key) {
		String vaule = null;
		try {
			vaule = jsonObject.getString(key);
		} catch (JSONException e) {
			e.printStackTrace();
			logger.error("getValueByKey->>参数" + key + "不存在" + e.getMessage());
		}
			return vaule;
	}
	

	

	
	
	/**
	 * 通过JSONObject的Key来获取JSONArray数组(net.sf.json)
	 * @param jsonObject  对象
	 * @param key		  key值
	 * @return JSONArray  返回对象 
	 */
	public static JSONArray getJsonArrayByKey(JSONObject jsonObject, String key){
		JSONArray jsonArray = null;
		try {
			jsonArray = jsonObject.getJSONArray(key);
		} catch (JSONException e) {
			e.printStackTrace();
			logger.error("getJsonArrayByKey->>参数" + key + "不存在" +  e.getMessage());
		}
			return jsonArray;
	}
	
	
	/**
	 * 通过Object获取JsonString(net.sf.json)
	 * @param object   对象
	 * @return String  返回字符
	 */
    public static String getJsonStringByObject(Object object) {  
    	JSONObject jsonObject = null;
    	try{
    		jsonObject = JSONObject.fromObject(object);  
    	} catch(JSONException e){
    		e.printStackTrace();
    		logger.error("getJsonStringByObject->>根据Object转换String失败 " + e.getMessage());
    	}
    		return jsonObject.toString();  
    }  
	
    

    
	/**
	 * 将jsonString转换成ClassObject对象(net.sf.json)
	 * @param jsonString  字符串
	 * @param cls		  转换类
	 * @return Object     返回对象 
	 */
	public static <T> T getObjectByJsonString(String jsonString, Class<T> cls) {  
		Object pojo = null;
        JSONObject jsonObject = JSONObject.fromObject(jsonString);
        pojo = JSONObject.toBean(jsonObject, cls);  
        return (T) pojo;  
    }  

	/**
	 * 将jsonString转换成Map<String,Object>集合(net.sf.json)
	 * @date 2014年10月8日 下午4:05:51
	 * @param jsonString  字符串
	 * @return Map<String,Object> 返回对象 
	 */
	public static Map<String, Object> getMapByJsonString(String jsonString) {  
		JSONObject jsonObject = JSONObject.fromObject(jsonString);
		Iterator keyIter = jsonObject.keys();
		String key = null;
		Object value = null;
		Map<String, Object> valueMap = new HashMap<String, Object>();
		while (keyIter.hasNext()) {
			key = (String) keyIter.next();
			value = jsonObject.get(key);
			valueMap.put(key, value);
		}
		return valueMap;
	} 
	
	
	/**
	 * 将jsonString转换成Object[]数组(net.sf.json)
	 * @date 2014年10月8日 下午4:05:51
	 * @param jsonString  字符串
	 * @return Object[]   数组
	 */
	public static Object[] getObjectArrayByJsonString(String jsonString) {  
		JSONArray jsonArray = JSONArray.fromObject(jsonString);  
        return jsonArray.toArray();  
    }  
	
	
	/**
	 * 将jsonString转换成String[]数组(net.sf.json)
	 * @date 2014年10月8日 下午4:05:51
	 * @param jsonString  字符串
	 * @return String[]   数组
	 */
    public static String[] getStringArrayByJsonString(String jsonString) {  
    	JSONArray jsonArray = JSONArray.fromObject(jsonString);  
        String[] stringArray = new String[ jsonArray.size() ];  
        for (int i = 0; i < jsonArray.size(); i++) {  
            stringArray[i] = jsonArray.getString(i);  
        }  
        return stringArray;  
    }  
	
    
	/**
	 * 将jsonString转换成Long[]数组(net.sf.json)
	 * @date 2014年10月8日 下午4:05:51
	 * @param jsonString  字符串
	 * @return Long[]     数组
	 */
    public static Long[] getLongArrayByJsonString(String jsonString) {  
    	JSONArray jsonArray = JSONArray.fromObject(jsonString);  
        Long[] longArray = new Long[ jsonArray.size() ];  
        for (int i = 0; i < jsonArray.size(); i++) {  
            longArray[i] = jsonArray.getLong(i);  
        }  
        return longArray;  
    }  
    
    
	/**
	 * 将jsonString转换成Integer[]数组(net.sf.json)
	 * @date 2014年10月8日 下午4:05:51
	 * @param jsonString  字符串
	 * @return Integer[]  数组
	 */
    public static Integer[] getIntegerArrayByJsonString(String jsonString) {  
    	JSONArray jsonArray = JSONArray.fromObject(jsonString);  
        Integer[] integerArray = new Integer[ jsonArray.size() ];  
        for (int i = 0; i < jsonArray.size(); i++) {  
            integerArray[i] = jsonArray.getInt(i);  
        }  
        return integerArray;  
    }  
    
    
	/**
	 * 将jsonString转换成Date[]数组(net.sf.json)
	 * @date 2014年10月8日 下午4:05:51
	 * @param jsonString  字符串
	 * @param dataFormat  时间格式(yyyy-MM-dd 或  yyyy-MM-dd HH:mm:ss)
	 * @return Date[]     数组
	 */
    public static Date[] getDateArrayByJsonString(String jsonString, String dataFormat) {  
    	JSONArray jsonArray = JSONArray.fromObject(jsonString);  
        Date[] dateArray = new Date[ jsonArray.size() ];  
        String dateString = null;
        Date date = null;
        for (int i = 0; i < jsonArray.size(); i++) {  
            dateString = jsonArray.getString(i);  
            date = DateTool.getFormatDateByString(dateString, dataFormat);
            dateArray[i] = date;  
        }  
        return dateArray;  
    }  
    
	
	/**
	 * 将jsonString转换成Double[]数组(net.sf.json)
	 * @date 2014年10月8日 下午4:05:51
	 * @param jsonString  字符串
	 * @return Double[]   数组
	 */
    public static Double[] getDoubleArray4Json(String jsonString) {  
    	JSONArray jsonArray = JSONArray.fromObject(jsonString);  
        Double[] doubleArray = new Double[ jsonArray.size() ];  
        for( int i = 0; i < jsonArray.size(); i++ ) {  
            doubleArray[i] = jsonArray.getDouble(i);  
        }  
        return doubleArray;  
    }  
    
    
	
	/**
	 * 将jsonString转换成List<Object>集合(net.sf.json)
	 * @date 2014年10月8日 下午4:05:51
	 * @param jsonString    字符串
	 * @param cls           转换类
	 * @return List<Object> 集合
	 */
	@SuppressWarnings({ "unchecked", "deprecation" })
	public static <T> List<T> getListByJsonString(String jsonString, Class<T> cls) {  
    	if("".equals(jsonString) || null == jsonString) {
    		return null;
    	}
      	JSONArray jsonArray = JSONArray.fromObject(jsonString);  
      	return JSONArray.toList(jsonArray, cls);
      	
    } 
    


//    /**
//     * 数据解析分析
//     * @param hashMap 返回hashMap集合
//     * @param json 响应Json数据
//     * @param cls 解析对象
//     * @return Map<String, Object> 返回集合
//     */
//	public static <T> Map<String, Object> getHashMap(Map<String, Object> hashMap, String json, Class<T> cls){
//		//创建jsonObject对象
//		org.json.JSONObject jsonObject;
//		try {
//			jsonObject = new org.json.JSONObject(json);
//			//获取返回编码
//			String code = AppJsonObjectMgr.getValueByKey(jsonObject, BaseApp.RETURN_CODE);
//			//获取返回消息
//			String message = AppJsonObjectMgr.getValueByKey(jsonObject, BaseApp.RETURN_MESSAGE);
//			//获取返回结果
//			String result = AppJsonObjectMgr.getValueByKey(jsonObject, BaseApp.RETURN_RESULT);
//			if(BaseApp.RETURN_SUCCESS_001.equals(code)) {
//				//请求成功
//				hashMap.put(BaseApp.RETURN_CODE, code);
//				hashMap.put(BaseApp.RETURN_MESSAGE, message);
//				hashMap.put(BaseApp.RETURN_RESULT, null != cls ?  AppJsonObjectMgr.getGsonObjectByObject(json, cls) : null);
//				return hashMap;
//			}else{
//				//请求失败
//				hashMap.put(BaseApp.RETURN_CODE, code);
//				hashMap.put(BaseApp.RETURN_MESSAGE, message);
//				hashMap.put(BaseApp.RETURN_RESULT, result);
//				return hashMap;
//			}
//		} catch (JSONException e) {
//			e.printStackTrace();
//			hashMap.put(BaseApp.RETURN_CODE, BaseApp.RETURN_ERROR);
//			hashMap.put(BaseApp.RETURN_MESSAGE, BaseApp.RETURN_SERVER_EXCEIPTION);
//			hashMap.put(BaseApp.RETURN_RESULT, null);
//			logger.error("AppJsonObjectMgr-->>getHashMap", BaseApp.RETURN_SERVER_EXCEIPTION + e.getMessage());
//		}
//			return hashMap;
//	}

}
